﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using l1cs.server.model.Instance;
using l1cs.server.model;
using l1cs.server.serverpackets;

namespace l1cs.server.clientpackets
{
    public class C_TradeAddItem : ClientBasePacket
    {
        private const String _C_TRADE_ADD_ITEM = "[C] C_TradeAddItem";
        private static Logger _log = Logger.getLogger( typeof( C_TradeAddItem ).FullName );

        public C_TradeAddItem( byte[] abyte0, ClientThread client )
            : base( abyte0 )
        {

            int itemid = readD();
            int itemcount = readD();
            L1PcInstance pc = client.getActiveChar();
            L1Trade trade = new L1Trade();
            L1ItemInstance item = pc.getInventory().getItem( itemid );
            if ( !item.getItem().isTradable() )
            {
                pc.sendPackets( new S_ServerMessage( 210, item.getItem().getName() ) ); // \f1%0は捨てたりまたは他人に讓ることができません。
                return;
            }
            if ( item.getBless() >= 128 )
            { // 封印された装備
                // \f1%0は捨てたりまたは他人に讓ることができません。
                pc.sendPackets( new S_ServerMessage( 210, item.getItem().getName() ) );
                return;
            }
            //Object[] petlist = pc.getPetList().values().toArray();
            foreach ( Object petObject in pc.getPetList().Values )
            {
                if ( petObject is L1PetInstance )
                {
                    L1PetInstance pet = (L1PetInstance)petObject;
                    if ( item.getId() == pet.getItemObjId() )
                    {
                        // \f1%0は捨てたりまたは他人に讓ることができません。
                        pc.sendPackets( new S_ServerMessage( 210, item.getItem()
                                .getName() ) );
                        return;
                    }
                }
            }

            L1PcInstance tradingPartner = (L1PcInstance)L1World.getInstance()
                    .findObject( pc.getTradeID() );
            if ( tradingPartner == null )
            {
                return;
            }
            if ( pc.getTradeOk() )
            {
                return;
            }
            if ( tradingPartner.getInventory().checkAddItem( item, itemcount )
                    != L1Inventory.OK )
            { // 容量重量確認及びメッセージ送信
                tradingPartner.sendPackets( new S_ServerMessage( 270 ) ); // \f1持っているものが重くて取引できません。
                pc.sendPackets( new S_ServerMessage( 271 ) ); // \f1相手が物を持ちすぎていて取引できません。
                return;
            }

            trade.TradeAddItem( pc, itemid, itemcount );
        }

        override
        public String getType()
        {
            return _C_TRADE_ADD_ITEM;
        }
    }
}
